package models

import (
	"crypto/sha256"
	"fmt"
	"time"
)

// RuleConfig 规则配置
type RuleConfig struct {
	Type    string `json:"type"`
	Keyword string `json:"keyword"`
	Group   string `json:"group"`
}

// ProxyNode 代理节点信息
type ProxyNode struct {
	Host      string    `json:"host"`
	Port      int       `json:"port"`
	Password  string    `json:"password"`
	VIP       bool      `json:"vip"`
	Country   string    `json:"country"`
	LastHeart time.Time `json:"last_heart"`
	Status    string    `json:"status"` // online, offline
}

func (pn *ProxyNode) Key() string {
	return fmt.Sprintf("%s:%d", pn.Host, pn.Port)
}

func (pn *ProxyNode) Name() string {
	hash := sha256.Sum256([]byte(pn.Key()))
	return fmt.Sprintf("%x", hash[:8])
}

// ProxyRegisterMessage 代理注册消息
type ProxyRegisterMessage struct {
	Host     string `json:"host"`
	Port     int    `json:"port"`
	Password string `json:"password"`
	VIP      bool   `json:"vip"`
	Country  string `json:"country"`
}

func (prm *ProxyRegisterMessage) Key() string {
	return fmt.Sprintf("%s:%d", prm.Host, prm.Port)
}

// ProxyHeartbeatMessage 代理心跳消息
type ProxyHeartbeatMessage struct {
	Host string `json:"host"`
	Port int    `json:"port"`
	Time int64  `json:"time"`
}

func (phm *ProxyHeartbeatMessage) Key() string {
	return fmt.Sprintf("%s:%d", phm.Host, phm.Port)
}
